package com.xdwanj.smartcity.data.repository;

import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;

import com.xdwanj.smartcity.data.bean.User;

public interface IUserRepository {

    /**
     * 判断是否登录(本地保存的token是否有效)
     *
     * @return
     * @throws Exception
     */
    LiveData<Boolean> isOnline(LifecycleOwner context) throws Exception;

    /**
     * 登陆
     *
     * @param username 用户名
     * @param password 密码
     * @return token
     * @throws Exception
     */
    LiveData<String> login(String username, String password) throws Exception;

    /**
     * username,password,phone,sex
     * 性别 0 男 1 女
     *
     * @param username v
     * @param password v
     * @param phone    v
     * @param sex      v
     * @return 成功与否
     * @throws Exception
     */
    LiveData<Boolean> register(String username, String password, String phone, int sex) throws Exception;

    /**
     * 登出
     *
     * @throws Exception
     */
    void logout() throws Exception;

    /**
     * avatar 用户头像 false
     * email 邮箱 false
     * idCard 身份证号 false
     * nickName 用户昵称 true
     * phonenumber 手机号 false
     * sex 用户性别 0 男 1 女 false
     *
     * @param user
     * @return
     * @throws Exception
     */
    LiveData<Boolean> updateUserInfo(User user) throws Exception;

    /**
     * 修改密码, Postman 请求也是失败, 目测是服务器的问题
     *
     * @param oldPwd 旧密码 v
     * @param newPwd 新密码 v
     * @return
     * @throws Exception
     */
    LiveData<Boolean> updatePwd(String oldPwd, String newPwd) throws Exception;

    /**
     * 添加反馈
     * content 反馈内容 x
     * title 反馈标题 x
     *
     * @param title
     * @param content
     * @return
     * @throws Exception
     */
    LiveData<Boolean> insertFeedBack(String title, String content) throws Exception;

    /**
     * 保存token, 同时设置到Config.token中
     *
     * @param token
     * @return
     * @throws Exception
     */
    boolean saveToken(String token) throws Exception;

    /**
     * 获取token
     *
     * @return
     * @throws Exception
     */
    String getDiskToken() throws Exception;

    /**
     * 返回用户信息
     *
     * @return
     * @throws Exception
     */
    LiveData<User> getUser() throws Exception;

    /**
     * 放弃加载
     *
     * @throws Exception
     */
    void cancelAll() throws Exception;
}
